#ifndef SORTALGORITHM_H
#define SORTALGORITHM_H

#include <QVector>
#include <QColor>
#include "sortvisualizerwidget.h"

// 排序顺序枚举：升序 或 降序
enum class SortOrder {
    Ascending,   // 升序排序
    Descending   // 降序排序
};

// 抽象基类：所有排序算法的通用接口
class SortAlgorithm {
public:
    // 虚析构函数，确保派生类析构时资源正确释放
    virtual ~SortAlgorithm() {}

    // 执行一步排序逻辑（用于逐步动画）
    virtual void step() = 0;

    // 判断当前排序是否完成
    virtual bool isFinished() const = 0;

    // 获取当前的排序数据（包含颜色信息）
    virtual const QVector<SortBar>& getData() const = 0;

    // 获取当前 step 中的比较次数，并重置计数器
    virtual int getAndResetCompareCount() = 0;

    // 获取当前 step 中的交换次数，并重置计数器
    virtual int getAndResetSwapCount() = 0;

    // 获取当前算法的时间与空间复杂度信息
    virtual QString getComplexityInfo() const = 0;

    // 设置排序顺序（升序或降序）
    virtual void setOrder(SortOrder order) = 0;
};

#endif // SORTALGORITHM_H
